This is a deadlock.
The following is an example deadlock
thread dump:
"Thread2": waiting to lock monitor 0x00000000076cf768 (object 0x00000000eb99b778,
a org.apache.commons.dbcp.PoolableConnection), which is held by "Thread1"
"Thread1": waiting to lock monitor 0x000000000627a360 (object 0x00000000eb913d50, a
org.apache.commons.pool.impl.GenericObjectPool), which is held by "Thread2"
Java stack information for the threads listed above:
===================================================
Thread1:
at org.apache.commons.pool.impl.GenericObjectPool.addObjectToPool(GenericObjectPool.java:872)
- waiting to lock <0x00000000eb911858> (a org.apache.commons.pool.impl.GenericObjectPool)
at org.apache.commons.pool.impl.GenericObjectPool.returnObject(GenericObjectPool.java:854)
at org.apache.commons.dbcp.PoolableConnection.close(PoolableConnection.java:80)
- locked <0x00000000eb9b7898> (a org.apache.commons.dbcp.PoolableConnection)
at Dbcp270$Thread1.run(Dbcp270.java:47)
Thread2:
at org.apache.commons.dbcp.AbandonedTrace.addTrace(AbandonedTrace.java:173)
- waiting to lock <0x00000000eb9b7898> (a org.apache.commons.dbcp.PoolableConnection)
at org.apache.commons.dbcp.AbandonedTrace.init(AbandonedTrace.java:89)
at org.apache.commons.dbcp.AbandonedTrace.(AbandonedTrace.java:79)
at org.apache.commons.dbcp.DelegatingStatement.(DelegatingStatement.java:60)
at org.apache.commons.dbcp.DelegatingConnection.createStatement(DelegatingConnection.java:161)
at org.apache.commons.dbcp.PoolableConnectionFactory.validateConnection(PoolableConnectionFactory.java:327)
at org.apache.commons.dbcp.PoolableConnectionFactory.validateObject (PoolableConnectionFactory.java:308)
at org.apache.commons.pool.impl.GenericObjectPool.evict
-locked <0x00000000eb911858> (a org.apache.commons.pool.impl.GenericObjectPool)
at Dbcp270$Thread2.run(Dbcp270.java:67)
More details about this bug are at DBCP-270 JIRA page.
This bug is reproduced under dbcp 1.2 and JDK 1.6_33.
Execute
the following scripts to run the test to reproduce the bug (assume the location of the dbcp test project is dbcp_test_home).
Example:
Use monitor to report and terminate the program when deadlock happens:
${dbcp_test_home}/scripts/270.sh
Turn off monitor:
${dbcp_test_home}/scripts/270.sh
--monitoroff
| Option | Function |
| --monitoroff, -mo | Turn off to stop reporting bug messages and ending program
when test runs into the expected concurrency bug which is a deadlock. User has to terminate the program manually when this option is set. |